"""
    学习通自动刷网课
"""
import time
import math
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.chrome.webdriver import WebDriver

if __name__ == '__main__':
    path = '../chromedriver.exe'
    url = 'http://i.chaoxing.com/base'
    course_name = '计算机专业英语'
    # 打开浏览器
    browser: WebDriver = webdriver.Chrome(path)
    # 前往指定页面
    # 全屏打开
    browser.get(url)
    browser.maximize_window()
    # 输入账号和密码
    browser.find_element_by_css_selector('.ipt-tel').send_keys('15660917807')
    # 输入密码
    browser.find_element_by_css_selector('.ipt-pwd').send_keys('cai123cai456')
    # 点击登录
    browser.find_element_by_css_selector('#loginBtn').click()
    # 获得课程列表
    # 切换到对应的iframe标签
    time.sleep(2)
    iframe = browser.find_element_by_css_selector('#frame_content')
    # 切换到iframe标签之中
    browser.switch_to.frame(iframe)
    course_list = browser.find_elements_by_css_selector('.course-name')
    # 点击指定课程
    for course in course_list:
        if course.text == course_name:
            course.click()
            break
    while True:
        """学习进度页"""
        # 找到第一个未完成任务点
        # 因为多出来一个页面，关闭当前页面
        # browser.close()

        browser.switch_to.window(browser.window_handles[-1])
        try:
            # 艺术鉴赏第一个任务没办法消掉
            task = browser.find_elements_by_css_selector('.orange')[0]
        except NoSuchElementException as e:
            print('未找到任务，课程任务已完成')
            break
        # 获得第一个未完成任务的任务数
        learning_progress_url = browser.current_url
        print(learning_progress_url)
        task_num = int(task.text)
        task.click()
        time.sleep(1)
        # 切换到对应的iframe标签
        iframe_two = browser.find_element_by_css_selector('#iframe')
        browser.switch_to.frame(iframe_two)
        time.sleep(1)
        # 获得所有课程页面的iframe列表
        iframe_course_list = browser.find_elements_by_css_selector('.ans-attach-online')
        all_curse_size = len(iframe_course_list)
        time.sleep(1)
        # 观看本任务点的所有视频
        print(f'还有{task_num}个视频未看')
        # 切换到对应的iframe标签下
        browser.switch_to.frame(iframe_course_list[all_curse_size - task_num])
        time.sleep(2)
        # 点击播放按钮
        play_button = browser.find_element_by_css_selector('.vjs-big-play-button')
        play_button.click()
        # browser.execute_script('arguments[0].scrollIntoView();', play_button)
        # 点击2倍速播放
        browser.find_element_by_css_selector('.vjs-playback-rate').click()
        browser.find_element_by_css_selector('.vjs-playback-rate').click()
        browser.find_element_by_css_selector('.vjs-playback-rate').click()
        # 点击静音
        browser.find_element_by_css_selector('.vjs-mute-control').click()
        # 获得该视频的总分钟数
        time.sleep(1)
        video_html5_api = browser.find_element_by_css_selector('#video_html5_api')
        video_html5_api.click()

        time.sleep(1)
        video_html5_api.click()
        video_time = browser.find_element_by_css_selector('.vjs-duration-display').text
        print(f'视频总长{video_time}')
        all_time_minute = int(video_time.split(':')[0])
        # 获得已播放的分钟数
        time.sleep(0.5)
        display_time = browser.find_element_by_css_selector('.vjs-current-time-display').text
        print(f'已观看{display_time}')
        display_time_minute = int(display_time.split(':')[0])
        # 得到需要睡眠的时间
        sleep_time_minute = math.ceil((all_time_minute - display_time_minute) / 2)
        print(f'睡眠{sleep_time_minute}分钟')
        time.sleep(sleep_time_minute*60)  # 睡眠
        # 返回学习进度页
        browser.back()
        time.sleep(0.5)
        browser.back()
        time.sleep(1)
        browser.refresh()


